/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {

    if (!s || !s.length) {
        return 0
    }
    let winSet = new Set
    let l = 0
    let ans = 0
    let tempLen = 0
    for (let i = 0; i < s.length; i++) {
        if (!winSet.has(s[i])) {
            winSet.add(s[i])
            tempLen++
            ans = Math.max(ans, tempLen)
        } else {
            winSet.delete(s[l++])
            tempLen--
            i--
        }
    }
    return ans
}

let input = "pwwkew"

console.log(lengthOfLongestSubstring(input))

//================v1要点总结===============
/**
 * 1. 一般滑动窗口，利用Set 数据结构进行重复性判断
 * 2. 需要一个起始位置l,用来指定set中删除的元素，以实现移动窗口左侧的目的
 */

